/**
 * @description 验证相关函数
 */
/**
 * @description 验证变量是否是纯粹对象，不包含数组、函数、日期、null
 * @param {Any} value 需要验证的对象
 * @returns {Boolean} 是对象返回true，否则返回false
 */
export function isPlainObject(value) {
	// 先进行基础检查：排除 null、检查类型是否为 object
	if (value === null || typeof value !== "object") {
		return false;
	}

	// 获取原型
	const prototype = Object.getPrototypeOf(value);

	// 检查原型是否为 null（如 Object.create(null) 创建的对象）
	// 或者原型是否等于 Object.prototype（普通对象）
	return prototype === null || prototype === Object.prototype;
}

/**
 * @description 验证变量是否是数组
 * @param {Any} value 需要验证的对象
 * @returns {Boolean} 是数组返回true，否则返回false
 */
export function isArray(value) {
	return Array.isArray(value);
}

/**
 * @description 验证变量是否是函数
 * @param {Any} value 需要验证的对象
 * @returns {Boolean} 是函数返回true，否则返回false
 */
export function isFunction(value) {
	return typeof value === "function";
}

/**
 * @description 验证变量是否是字符串
 * @param {Any} value 需要验证的对象
 * @returns {Boolean} 是字符串返回true，否则返回false
 */
export function isString(value) {
	return typeof value === "string";
}

/**
 * @description 是否是数字或数字字符串或带小数点的数字字符串
 * @param {Any} value 需要验证的对象
 * @returns {Boolean} 是字符串返回true，否则返回false
 */
export function isNumber(value) {
	// 先判断是否是纯数字
	if (typeof value === "number") return true;

	// 在判断是否是字符串
	if (isString(value)) {
		// 使用正则表但是判断是否是数字字符串或带小数点的数字字符串
		const reg = /^-?\d+(\.\d+)?$/;
		return reg.test(value);
	}

	return false;
}
